home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / NEW / A-Newest / TORPET.d64 / graphic tutor (.txt) < prev    next >
Commodore BASIC  |  2009-10-12  |  16KB  |  392 lines

  1. 0 REM" PONZO*82*WATERLOO
  2. 1 [143]"
  3. 1000 GOSUB60000:PRINT"[147]             [159]GRAPHICS-1[159]"
  4. 1001 PRINT"[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
  5. 1002 PRINT"[221] [159]         GRAPHICS AND STUFF        [146] [221]":MS$=" WELCOME! "
  6. 1003 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]":GOSUB63100
  7. 1004 GOSUB63000
  8. 1005 PRINT"[147]           THE VIDEO SCREEN"
  9. 1010 PRINT"LET'S FIND OUT HOW THE C64 DECIDES WHAT"
  10. 1020 PRINT"TO PUT IN ONE OF THE 1000 SCREEN"
  11. 1030 PRINT"LOCATIONS..SAY LOCATION #K."
  12. 1040 PRINT"(WHERE K=0 OR 1 OR 2 OR.. 999)"
  13. 1050 PRINT"1[146]:LOOK IN S[146]CREEN M[146]EMORY[146], IN LOCATION"
  14. 1060 PRINT"  SM[146]+K, AND GET 1 BYTE:N (0<=N<=255)"
  15. 1070 PRINT"2[146][146]:LOOK IN C[146]HARACTER M[146]EMORY[146], IN"
  16. 1080 PRINT"  LOCATIONS CM[146]+8*N,CM[146]+8*N+1,..CM[146]+8*N+7"
  17. 1090 PRINT"  AND GET 8 BYTES:P,P+1,..,P+7."
  18. 1100 PRINT"3[146]:LOOK IN COLOUR MEMORY[146], IN LOCATION"
  19. 1110 PRINT"  55296+K, AND GET 1 NYBBLE:C (0<=C<=15)"
  20. 1120 GOSUB63000
  21. 1130 PRINT"[147]THEN, ARMED WITH 8 BYTES P,P+1,...,P+7"
  22. 1140 PRINT"AND 1 NYBBLE C (4 BITS), THE C64"
  23. 1150 PRINT"USES THE 64 BITS OF P,P+1,...,P+7"
  24. 1160 PRINT"TO DETERMINE WHICH 'DOTS' OR 'PIXELS'"
  25. 1170 PRINT"AT SCREEN LOCATION K ARE TO BE ON[146]"
  26. 1180 PRINT"AND WHICH ARE TURNED OFF[146]."
  27. 1190 PRINT"THE OFF[146] PIXELS ARE IN THE BACKGROUND[146]"
  28. 1200 PRINT"COLOUR, AND THE ON[146] PIXELS ARE IN"
  29. 1210 PRINT"THE COLOUR GIVEN BY THE NYBBLE C[146]!"
  30. 1220 GOSUB63000
  31. 1230 PRINT"[147]IF THE 8 BYTES P,P+1,...,P+7 TAKEN FROM"
  32. 1240 PRINT"CHARACTER MEMORY[146], WHICH STARTS AT CM[146],"
  33. 1250 PRINT"GIVE THE 'PIXEL PATTERN' FOR THE LETTER"
  34. 1260 PRINT"'P', AND THE NYBBLE TAKEN FROM COLOUR"
  35. 1270 PRINT"MEMORY[146], WHICH STARTS AT 55296, IS"
  36. 1280 PRINT"C='10' (LIGHT RED), A LIGHT RED 'P'"
  37. 1290 PRINT"WILL APPEAR ON THE SCREEN IN THE K'TH"
  38. 1300 PRINT"SCREEN POSITION.":MS$="1=ON[146] 0=OFF[146]":GOSUB63100:GOSUB63000
  39. 1310 PRINT"[147]'NORMALLY' SCREEN MEMORY[146] STARTS AT"
  40. 1320 PRINT"SM=1024[146]. THESE 1000 MEMORY LOCATIONS,"
  41. 1330 PRINT"FROM 1024 TO 2023, HOLD 'CHARACTER"
  42. 1340 PRINT"NUMBERS'. IF THE LOCATION 1039 HOLDS"
  43. 1350 PRINT"N=17 THEN, SINCE 1039=1024+15 IS THE"
  44. 1360 PRINT"15'TH SCREEN POSITION, THIS 15'TH"
  45. 1370 PRINT"POSITION WILL DISPLAY THE 17'TH"
  46. 1380 PRINT"CHARACTER IN CHARACTER MEMORY[146]!"
  47. 1390 PRINT"(NOTE: SCREEN POSITIONS ARE NUMBERED"
  48. 1400 PRINT"       0,1,...999 SO #15 IS"
  49. 1405 PRINT"       REALLY THE 16'TH POSITION!)":GOSUB63000
  50. 1410 PRINT"[147]'NORMALLY' CHARACTER MEMORY[146] STARTS AT"
  51. 1420 PRINT"CM=53248 IF YOU'RE USING 'UPPER CASE"
  52. 1430 PRINT"AND GRAPHICS', AND STARTS AT"
  53. 1440 PRINT"CM=55296 IF YOU'RE USING 'LOWER AND"
  54. 1450 PRINT"UPPER CASE'."
  55. 1451 PRINT"NOTE[157][157][157][157][184][184][184][184][145]:FROM 53248 TO 55295 IS 2K BYTES"
  56. 1452 PRINT"    :FROM 55296 TO 57343 IS 2K BYTES"
  57. 1453 PRINT"    (2K FOR EACH 'CHARACTER SET')"
  58. 1455 MS$="  I CM ":GOSUB63100:GOSUB63000
  59. 1460 PRINT"[147]HOW DO YOU KNOW WHAT 'SM' IS?"
  60. 1470 PRINT"(WHERE SCREEN MEMORY[146] STARTS?)":
  61. 1475 MS$="  GUESS!":GOSUB63100:GOSUB63000
  62. 1480 PRINT"[147]LOOK IN V+24[146], THE 24'TH REGISTER"
  63. 1490 PRINT"IN THE VIDEO CHIP[146].":MS$="53248+24! ":GOSUB63100:GOSUB63000
  64. 1500 PRINT"[147]HOW DO YOU KNOW WHAT 'CM' IS?"
  65. 1510 PRINT"(WHERE CHARACTER MEMORY[146] STARTS?)":MS$="CM=???????":GOSUB63100
  66. 1520 GOSUB63000: PRINT"[147]LOOK IN V+24[146], THE 24'TH REGISTER"
  67. 1530 PRINT"IN THE VIDEO CHIP[146].":MS$="53248+24!!":GOSUB63100:GOSUB63000
  68. 1540 PRINT"[147]IN FACT THIS REGISTER, V+24[146],"
  69. 1550 PRINT"(V=53248[146] IS THE 'START' OF THE "
  70. 1560 PRINT"VIDEO CHIP) IS 8 BITS WIDE (1 BYTE)"
  71. 1570 PRINT"AND THE UPPER 4 BITS[146] (NYBBLE) GIVES"
  72. 1580 PRINT"THE START OF SCREEN MEMORY[146], SM,"
  73. 1590 PRINT"AND THE LOWER 4 BITS[146] GIVES THE"
  74. 1600 PRINT"START OF CHARACTER MEMORY[146], CM.":MS$="<SM>+<CM>":GOSUB63100
  75. 1610 GOSUB63000:PRINT"[147]SINCE 4 BITS CAN HAVE ONLY 16 VALUES"
  76. 1620 PRINT"THEN SCREEN MEMORY[146] CAN BE IN ONE OF"
  77. 1630 PRINT"16 POSSIBLE LOCATIONS, NAMELY:"
  78. 1640 PRINT"0,1024,2048,3072,4096,....,16384"
  79. 1650 PRINT"WHICH IS MORE EASILY THOUGHT OF AS"
  80. 1660 PRINT"1024 TIMES 0 OR 1 OR 2 ..OR 15."
  81. 1670 PRINT"SINCE SCREEN MEMORY[146] IS 'NORMALLY' AT"
  82. 1680 PRINT"1024 THEN THIS 'UPPER NYBBLE' CONTAINS"
  83. 1690 PRINT"'0001' IN BINARY OR '1' IN DECIMAL.":GOSUB63000
  84. 1700 PRINT"[147]SIMILARLY, CHARACTER MEMORY[146] CAN HAVE"
  85. 1710 PRINT"ONE OF 16 'STARTING ADDRESSES'..."
  86. 1720 PRINT"RIGHT?"
  87. 1725 MS$=" RIGHT[146]":GOSUB63100:GOSUB63000:PRINT"WRONG[146]!!!"
  88. 1730 PRINT"THE L[146]EAST S[146]IGNIFICANT B[146]IT IN V+24[146]"
  89. 1740 PRINT"ISN'T USED, SO THE 8[146] POSSIBLE"
  90. 1750 PRINT"LOWER NYBBLES IN V+24[146] ARE:"
  91. 1760 PRINT"000[214],001[214],010[214],011[214],100[214],101[214],110[214],111[214]"
  92. 1770 PRINT"EACH GIVING A DIFFERENT 'STARTING"
  93. 1780 PRINT"ADDRESS' FOR CHARACTER MEMORY[146],NAMELY:"
  94. 1790 PRINT"0,2048,4096,6144,....14336"
  95. 1800 PRINT"OR 2048*(0 OR 1 OR ... 7)":GOSUB63000
  96. 1810 PRINT"[147]'NORMALLY' CHARACTER MEMORY[146] IS AT"
  97. 1820 PRINT"CM=53248 (UPPER/GRAPHICS) OR"
  98. 1830 PRINT"CM=55296 (LOWER/UPPER) AND THE "
  99. 1840 PRINT"BIT PATTERNS 001[214] AND 011[214] WILL"
  100. 1850 PRINT"AUTOMATICALLY[146] SET CM=55396 OR CM=55296!"
  101. 1860 PRINT"ALSO YOU WON'T WANT TO USE 000[214] WHICH"
  102. 1870 PRINT"MEANS CM=0.(THE C64 NEEDS[146] THESE"
  103. 1880 PRINT"MEMORY LOCATIONS!)"
  104. 1890 PRINT"SO YOU CAN STORE 'PIXEL PATTERNS' AT:"
  105. 1900 PRINT"2048,8192,10240,12288 OR 14336":GOSUB63000
  106. 1910 PRINT"[147]IN FACT (!), EVEN SCREEN MEMORY[146] CAN"
  107. 1920 PRINT"NOT HAVE ALL 16 POSSIBLE 'STARTING"
  108. 1930 PRINT"POSITIONS'. THE BIT PATTERNS IN THE"
  109. 1940 PRINT"UPPER NYBBLE OF REGISTER V+24:"
  110. 1950 PRINT"0100,0101,0110,0111"
  111. 1960 PRINT"MEAN SCREEN MEMORY[146] AT:"
  112. 1970 PRINT"4096,5120,6144,7168"
  113. 1980 PRINT"AND THESE MEMORY LOCATIONS ARE NOT"
  114. 1990 PRINT"AVAILABLE FOR THE SCREEN!"
  115. 2000 PRINT"MORAL?":GOSUB63000
  116. 2010 PRINT"DO NOT USE 1024*(4 OR 5 OR 6)[146]!":GOSUB63000
  117. 2020 PRINT"[147]OK...SO YOU WANT TO 'DESIGN' YOUR"
  118. 2030 PRINT"OWN CHARACTER SET?"
  119. 2040 PRINT"JUST POINT THE VIDEO CHIP[146] TO"
  120. 2050 PRINT"YOUR[157][157][157][157][184][184][184][184][145] 'PIXEL PATTERNS'."
  121. 2060 PRINT"MAKE UP THE 'DOTS ON' AND 'DOTS OFF'"
  122. 2070 PRINT"WHICH DEFINE ALL 256 OR YOUR CHARACTERS"
  123. 2080 PRINT"& POKE THESE BITS (8-AT-ATIME=1 BYTE!)
  124. 2090 [153]"INTO CM,CM+1,...,CM+4095, CHOOSING"
  125. 2100 [153]"CMWAIT AS ONE OF THE AVAILABLE 'STARTING"
  126. 2110 [153]"ADDRESSES' FOR CHARACTER MEMORYWAIT"
  127. 2120 [153]"THEN TELL THE VIDEO CHIPWAIT BY"
  128. 2130 [153]"SETTING THE LOWER 4 BITS OF V+24WAIT.":[141]63000
  129. 2140 [153]"LOAD           MULTI COLOUR MODE"
  130. 2150 [153]"SINCE COLOUR MEMORYWAIT HAS 1000 NYBBLES,"
  131. 2160 [153]"ONE FOR EACH OF THE 1000 SCREEN POS'NS,"
  132. 2170 [153]"THEN EACH CHARACTER ON THE SCREEN CAN"
  133. 2180 [153]"HAVE ONE OF 16 DIFFERENT COLOURS."
  134. 2190 [153]"(BUT ALL CHARACTERS SHARE THE SAME"
  135. 2200 [153]"'BACKGROUND COLOUR')."
  136. 2210 [153]"SUPPOSE YOU WANT MORE THAN 2WAIT COLOURS"
  137. 2220 [153]"WITHIN A SINGLE 'CURSOR POSITION'."
  138. 2230 [153]"THEN TELL THE VIDEO CHIPWAIT!":[141]63000
  139. 2240 [153]"LOADIN REGISTER V+22WAIT IS A MAGIC BIT,"
  140. 2250 [153]"BIT 4WAIT, WHICH TURNS ON MULTI-COLOURWAIT."
  141. 2260 [153]"DON'T DISTURB THE OTHER BITS IN V+22WAIT"
  142. 2270 [153]"SO POKE V+22,PEEK(V+22)OR16WAIT."
  143. 2280 [153]"IN THIS MODE LET'S SEE HOW THE C64"
  144. 2290 [153]"DETERMINES WHAT TO PUT IN ONE OF THE"
  145. 2300 [153]"1000 SCREEN POSITIONS, SAY #K."
  146. 2310 [153]"(REMEMBER: K=0,1,2,....,999)":MS$[178]"K=0 IS 1ST":[141]63100
  147. 2320 [141]63000:[153]"LOAD1WAIT:LOOK IN SCREEN MEMORYWAIT AND GET"
  148. 2330 [153]"  THE K'TH BYTE, SAY IT'S N."
  149. 2340 [153]"2WAIT:LOOK IN CHARACTER MEMORYWAIT,"
  150. 2345 [153]"  FROM CM+8*N TO CM+8*N+7"
  151. 2350 [153]"  AND GET 8 BYTES: P,P+1,...,P+7."
  152. 2360 [153]"THE BITS IN P,P+1,...,P+7 DETERMINE"
  153. 2370 [153]"THE 'PIXEL ANDWAIT COLOUR PATTERN':"
  154. 2380 [153]"00WAIT SETS 2WAIT PIXELS TO COLOUR #0"
  155. 2390 [153]"01WAIT SETS 2WAIT PIXELS TO COLOUR #1"
  156. 2400 [153]"10WAIT SETS 2WAIT PIXELS TO COLOUR #2"
  157. 2410 [153]"11WAIT SETS 2WAIT PIXELS TO COLOUR #3":[141]63000:[153]"ONONON"
  158. 2420 [153]"?????????":[141]63000
  159. 2430 [153]"LOADLET'S SAY THAT AGAIN!"
  160. 2440 [153]"SUPPOSE THE FIRST BYTE,P,IS:"
  161. 2450 [153]"P=11 10 00 01 (IN BINARY)."
  162. 2460 [153]"THEN THE FIRST ROW OF PIXELS WILL BE:"
  163. 2470 [153]"CLR  SYS      WAIT _SEE, 4 COLOURS!"
  164. 2480 [153]"NOTE THAT 'PIXEL ON' OR 'PIXEL OFF'"
  165. 2490 [153]"IS NO LONGER MEANINGFUL."
  166. 2500 [153]"THERE ARE 4WAIT POSSIBILITIES FOR"
  167. 2510 [153]"EACH PAIRWAIT OF PIXELS!"
  168. 2520 [153]"NOTE,TOO,THAT THE HORIZONTAL RESOLUTION"
  169. 2530 [153]"IS NOT AS 'DETAILED' AS IN 'NORMAL'"
  170. 2540 [153]"COLOUR MODE (BIT4=0)."
  171. 2550 [141]63000:[153]"LOADSUPPOSE THE NUMBER NWAIT READ FROM"
  172. 2560 [153]"SCREEN MEMORYWAIT IS A 1WAIT."
  173. 2570 [153]"THEN THE 8 BYTES READ FROM CM+8-CM+15,"
  174. 2580 [153]"IN CHARACTER MEMORYWAIT, WILL HAVE THE"
  175. 2590 [153]"BIT PATTERN DEFINING THE LETTER 'A'."
  176. 2600 [153]"(IF 'NORMAL' CHAR. MEMORY:CM=53248)"
  177. 2610 [153]"NOTE:0='@',1='A',2='B', ETC.
  178. 2615 PRINT"THE SAME NUMBERS YOU 'POKE' TO"
  179. 2616 PRINT"SCREEN MEMORY[146] TO GET @,A,B.."
  180. 2617 PRINT"ON THE SCREEN!":GOSUB63000
  181. 2620 A$(0)="00011000 =P"
  182. 2630 A$(1)="00100100 =P+1"
  183. 2640 A$(2)="01000010 =P+2"
  184. 2650 A$(3)="01111110 =P+3"
  185. 2660 A$(4)="01000010 =P+4"
  186. 2670 A$(5)="01000010 =P+5"
  187. 2680 A$(6)="01000010 =P+6"
  188. 2690 A$(7)="00000000 =P+7"
  189. 2700 PRINT"[147]HERE ARE THE 8 BYTES FOR 'A':":FORI=0TO7:PRINTA$(I):NEXT
  190. 2710 PRINT"SEE THE LETTER 'A'?":GOSUB63000
  191. 2720 B$(0)="   [209][209]    =P"
  192. 2730 B$(1)="  [209]  [209]   =P+1"
  193. 2740 B$(2)=" [209]    [209]  =P+2"
  194. 2750 B$(3)=" [209][209][209][209][209][209]  =P+3"
  195. 2760 B$(4)=" [209]    [209]  =P+4"
  196. 2770 B$(5)=" [209]    [209]  =P+5"
  197. 2780 B$(6)=" [209]    [209]  =P+6"
  198. 2790 B$(7)="         =P+7"
  199. 2795 PRINT"";
  200. 2800 FORI=0TO7:PRINTB$(I):NEXT:MS$="NICE A,EH?":GOSUB63100:GOSUB63000
  201. 2810 PRINT"[147]";:FORI=0TO7:PRINTA$(I):NEXT
  202. 2815 PRINT"NOW, TAKEN IN PAIRS.."
  203. 2820 C$(0)="00[146]0110[146]00 =P"
  204. 2830 C$(1)="0010[146]0100[146] =P+1"
  205. 2840 C$(2)="01[146]0000[146]10 =P+2"
  206. 2850 C$(3)="0111[146]1110[146] =P+3"
  207. 2860 C$(4)="01[146]0000[146]10 =P+4"
  208. 2870 C$(5)="0100[146]0010[146] =P+5"
  209. 2880 C$(6)="01[146]0000[146]10 =P+6"
  210. 2890 C$(7)="0000[146]0000[146] =P+7"
  211. 2895 MS$="IN PEARS?":GOSUB63100
  212. 2900 GOSUB63000:PRINT"";:FORI=0TO7:PRINTC$(I):FORT=1TO500:NEXT:NEXT
  213. 2910 PRINT"DEPENDING UPON WHETHER THE 'BIT PAIRS'
  214. 2920 [153]"ARE 00WAIT OR 01WAIT OR 10WAIT OR 11WAIT"
  215. 2930 [153]"WE SET THE CORRESPONDING 'PIXEL PAIRS'"
  216. 2940 [153]"TO COLOUR #0 OR 1 OR 2 OR 3.":[141]63000
  217. 2950 [153]"";:
  218. 2960 D$(0)[178]"  OPEN  CLR    WAIT =P"
  219. 2970 D$(1)[178]"  CLR  OPEN    WAIT =P+1"
  220. 2980 D$(2)[178]"OPEN      CLR  WAIT =P+2"
  221. 2990 D$(3)[178]"OPEN      CLR  WAIT =P+3"
  222. 3000 D$(4)[178]"OPEN      CLR  WAIT =P+4"
  223. 3010 D$(5)[178]"OPEN      CLR  WAIT =P+5"
  224. 3020 D$(6)[178]"OPEN      CLR  WAIT =P+6"
  225. 3030 D$(7)[178]"        WAIT =P+7"
  226. 3040 [129]I[178]0[164]7:[153]D$(I):[129]T[178]1[164]500:[130]:[130]:MS$[178]"LOOKS NICE":[141]63100
  227. 3050 [141]63000:[153]"LOAD";:[129]I[178]0[164]7:[153]D$(I):[130]
  228. 3060 [153]"....LOOK LIKE AN 'A'?"
  229. 3070 [153]"WELL, IT ISWAIT MADE UP OF 4WAIT COLOURS"
  230. 3080 [153]"AND THAT MAY BE WORTH THE LOSS IN"
  231. 3090 [153]"RESOLUTION."
  232. 3100 [153]"HOWEVER, YOU MAY WANT TO USE THIS"
  233. 3110 [153]"MULTI-COLOUR MODEWAIT FOR OTHER THAN TO"
  234. 3120 [153]"DISPLAY MULTI-COLOURED CHARACTERS!"
  235. 3130 [141]63000:[153]"LOADWHAT ARE THESE 'COLOUR #0' ETC,?""
  236. 3140 PRINT"IN V+33[146] V+34[146] & V+35[146] ARE THE"
  237. 3150 PRINT"COLOURS #0,#1 & #2."
  238. 3160 PRINT"THE LOWER NYBBLE IN THESE VIDEO CHIP"
  239. 3170 PRINT"REGISTERS DEFINE THE 16 POSSIBLE "
  240. 3180 PRINT"COLOURS FOR THE 00[146] 01[146] & 10[146] BIT PAIRS."
  241. 3190 PRINT"SINCE V=53248[146] THEN V+33[146]=53281"
  242. 3200 PRINT"WHICH YOU MAY RECOGNIZE AS THE REGISTER"
  243. 3210 PRINT"GIVING THE 'BACKGROUND' COLOUR!":PRINT"(COLOUR #0=BACKGROUND)"
  244. 3220 GOSUB63000:PRINT"[147]NOTICE THAT, HAVING PICKED YOUR"
  245. 3230 PRINT"FAVOURITE COLOURS #0,1 & 2, ALL[146]"
  246. 3240 PRINT"THE CHARACTERS ON THE SCREEN SHARE"
  247. 3250 PRINT"THESE COLOURS!"
  248. 3260 PRINT"BUT[157][157][157][184][184][184][145]..EACH CHARACTER CAN HAVE"
  249. 3270 PRINT"IT'S OWN 'COLOUR #3'!"
  250. 3280 PRINT"(BUT!THERE ARE ONLY 8 TO CHOOSE FROM!)."
  251. 3290 PRINT"WHERE'S COLOUR #3???":MS$="MY COLOUR!":GOSUB63100:GOSUB63000
  252. 3300 PRINT"[147]IN COLOUR MEMORY[146]!!":MS$="WHAT ELSE!":GOSUB63100
  253. 3305 GOSUB63000:PRINT"[147]LET'S SEE HOW THAT WORKS:"
  254. 3310 PRINT"RECALL THAT COLOUR MEMORY[146] IS MADE"
  255. 3320 PRINT"UP OF 1000 NYBBLES, AT 55296."
  256. 3330 PRINT"THERE IS A 'NYBBLE' FOR EACH SCREEN"
  257. 3340 PRINT"POSITION. YOU MIGHT EXPECT THAT THERE"
  258. 3350 PRINT"ARE 16[146] POSSIBLE COLOUR #3'S"
  259. 3370 PRINT"BUT[157][157][157][184][184][184][145] ONLY BITS 0-2 GIVE 'COLOUR #3'"
  260. 3380 PRINT"AND THE BIT 3[146] TELLS THE VIDEO CHIP"
  261. 3390 PRINT"WHETHER THE CORRESPONDING SCREEN"
  262. 3391 E$(1)="[176][192][178][192][178][192][178][192][174]"
  263. 3392 E$(2)="[221] [221] [221] [221] [221]"
  264. 3393 E$(3)="[173][192][177][192][177][192][177][192][189]"
  265. 3400 PRINT"POSITION IS MULTI-COLOUR OR NOT!!":GOSUB63000
  266. 3401 PRINT"[147]"E$(1)
  267. 3402 PRINTE$(2)" _ A NYBBLE IN COLOUR MEMORY"
  268. 3403 PRINTE$(3)
  269. 3404 PRINT" ^ ^ ^ ^"
  270. 3405 PRINT" [221] COLOUR"
  271. 3406 PRINT" [221]  # 3  "
  272. 3407 PRINT" [221]"
  273. 3408 PRINT" MULTI-BIT[146]":MS$="   BIT 3[146]":GOSUB63100:GOSUB63000
  274. 3410 PRINT"[147]YOU MAY HAVE NOTICED SOMETHING STRANGE."
  275. 3411 PRINT"WE KEEP SAYING THAT CHARACTER MEMORY"
  276. 3412 PRINT"STARTS AT 55296"
  277. 3413 PRINT"WE ALSO SAY THAT COLOUR MEMORY"
  278. 3414 PRINT"STARTS AT 55296[146]!!"
  279. 3415 PRINT"WELL..IF YOU PEEK AND POKE 55296"
  280. 3416 PRINT"YOU'LL GET COLOUR MEMORY[146] ONLY."
  281. 3417 PRINT"THE 'NORMAL' CHARACTER MEMORY"
  282. 3418 PRINT"AT 55296 ISN'T SO SIMPLE TO ACCESS!"
  283. 3419 PRINT"..BUT THAT'S ANOTHER STORY..":GOSUB63000
  284. 3420 PRINT"[147]LET'S TRY MULTI-COLOUR!":MS$="OK OK OK":GOSUB63100:GOSUB63000
  285. 3425 PRINT"[147]ABCDEFGHIJKLMNPQRSTUVWXYZ":GOSUB63000
  286. 3440 PRINT"NOW INTO MULTI-COLOUR MODE[146] WITH:"
  287. 3450 PRINT"V=53248:POKEV+22,PEEK(V+22)OR16":GOSUB63001
  288. 3460 V=53248:POKEV+22,PEEK(V+22)OR16
  289. 3470 PRINT"NOTHING CHANGED, RIGHT?"
  290. 3480 PRINT"THAT'S BECAUSE COLOUR MEMORY HAS "
  291. 3490 PRINT"BIT 3 = 0[146]!":GOSUB63001:PRINT"LET'S:"
  292. 3500 PRINT"FORI=0TO25:POKE55296+I,8+8*RND(1):NEXT"
  293. 3510 PRINT"SETTING THE 1ST 26 NYBBLES IN COL. MEM."
  294. 3520 PRINT"TO RANDOM NUMBERS FROM 8 TO 15,":PRINT"THEN BIT 3 = 1":GOSUB63001
  295. 3530 FORI=0TO25:POKE55296+I,8+8*RND(1):NEXT:GOSUB63000
  296. 3540 PRINT"[147]A B C D E F G H I J K L M ":V=53248:POKEV+35,1:POKEV+34,0
  297. 3550 FORI=0TO25STEP2:POKE55296+I,8+8*RND(1):NEXT:POKE53281,12:PRINT""
  298. 3555 V=53248:POKEV+22,PEEK(V+22)OR16:GOSUB63000
  299. 3560 PRINT"LET'S PICK SOME COLOURS:"
  300. 3570 PRINT"FORI=0TO25:POKE55296+I,8+5:NEXT"
  301. 3580 PRINT"SET COLOUR #3 TO GREEN (GREEN=5)":GOSUB63001
  302. 3585 FORI=0TO25:POKE55296+I,13:NEXT
  303. 3590 PRINT"POKE V+35,0[146]..SET COLOUR #2 TO BLACK(0)":GOSUB63001:POKE53248+35,0
  304. 3600 PRINT"POKE V+34,1[146]..SET COLOUR #1 TO WHITE(1)":GOSUB63001:POKE53248+34,1
  305. 3610 PRINT"POKE V+33,2[146]..SET COLOUR #0 TO RED(2)":GOSUB63001:POKE53248+33,2
  306. 3620 GOSUB63000:PRINT"[147]":GOSUB60000:PRINT"[147]             BIT MAP MODE"
  307. 3630 PRINT"IN REGISTER 17 OF THE VIDEO CHIP"
  308. 3640 PRINT"IS ANOTHER MAGIC BIT, BIT 5[146], WHICH"
  309. 3650 PRINT"PUTS THE C64 INTO BIT MAP MODE[146]."
  310. 3660 PRINT"POKE V+17,PEEK(V+17)OR32[146] DOES IT!":MS$="  V+17[146]":GOSUB63100
  311. 3665 GOSUB63000
  312. 3670 PRINT"[147]BIT WE WON'T..JUST YET..":GOSUB63000:PRINT"WELL..JUST ONCE:"
  313. 3680 GOSUB63000:V=53248:POKEV+17,PEEK(V+17)OR32:FORT=1TO1000:NEXT
  314. 3690 V=53248:POKEV+17,PEEK(V+17)AND223
  315. 3700 PRINT"[147]LET'S SEE HOW THAT[146] HAPPENS!"
  316. 3710 PRINT"TO DETERMINE WHAT GOES ON THE SCREEN"
  317. 3720 PRINT"AT SOME LOCATION 'K' (0<=K<=999)"
  318. 3730 PRINT"THE C64 DOES THE FOLLOWING:"
  319. 3740 PRINT"1[146]:GO DIRECTLY TO CHARACTER MEMORY"
  320. 3750 PRINT"  TO LOCATIONS CM+8*K-CM+8*K+7"
  321. 3760 PRINT"  AND GET 7 BYTES:P,P+1,...,P+7."
  322. 3770 PRINT"2[146]:GO TO SCREEN MEMORY[146], TO SM+K,"
  323. 3780 PRINT"  AND GET 1 BYTE, SAY N.":GOSUB63000
  324. 3790 PRINT"[147]ARMED WITH P[146],P+1[146],..,P+7[146] AND N[146],"
  325. 3800 PRINT"SET THE PIXELS TO 'COLOUR C0' OR TO"
  326. 3810 PRINT"'COLOUR C1' DEPENDING UPON WHETHER THE"
  327. 3820 PRINT"CORRESPONDING BIT IN THE P,P+1,...,P+7"
  328. 3830 PRINT"PIXEL PATTERN IS '0' OR '1'":MS$="0=C0[146] 1=C1[146]":GOSUB63100
  329. 3840 GOSUB63000:PRINT"[147]COLOUR C0..COLOUR C1?????":GOSUB63001
  330. 3850 PRINT"WE LOOK AT THE BYTE,N,TAKEN FROM"
  331. 3860 PRINT"SCREEN MEMORY[146]:"
  332. 3870 FORI=1TO3:PRINTE$(I)E$(I):NEXT
  333. 3880 PRINT" ^ ^ ^ ^  ^ ^ ^ ^"
  334. 3890 PRINT" [221] [221] [221] [221]  COLOUR C0"
  335. 3900 PRINT" [221] [221] [221] [221]"
  336. 3910 PRINT"COLOUR C1"
  337. 3920 GOSUB63001:PRINT"NICE??":GOSUB63000:MS$="VERY NICE!":GOSUB63100:PRINT"[147]"
  338. 3930 GOSUB63000:PRINT"NOTE[157][157][157][157][184][184][184][184][145]:CHARACTER MEMORY[146] STILL GIVES"
  339. 3940 PRINT"     THE 'PIXEL PATTERN', BUT"
  340. 3950 PRINT"     SCREEN MEMORY[146] GIVES THE COLOURS!!"
  341. 3960 PRINT"FURTHERMORE..THE 8K BYTES IN CM[146]-CM+8191"
  342. 3970 PRINT"(CHARACTER MEMORY)..ARE SIMPLY...":GOSUB63001
  343. 3980 PRINT"LAID ON TOP OF THE SCREEN[146]!!":GOSUB63001
  344. 3990 PRINT"JUST POKE V+17,PEEK(V+17)OR32"
  345. 4000 MS$="  V+17[146]":GOSUB63100:GOSUB63000:PRINT"[147]":GOSUB63000
  346. 4010 PRINT"NOW, TO GET SOMETHING INTERESTING"
  347. 4020 PRINT"ON THE SCREEN IN BIT MAP MODE[146], WE"
  348. 4030 PRINT"MUST PUT GOOD LOOKING 'PIXEL PATTERNS'"
  349. 4040 PRINT"INTO CHARACTER MEMORY[146]."
  350. 4050 PRINT"HOW?":GOSUB63001
  351. 4060 PRINT"POKE GOOD STUFF INTO, SAY, LOCATIONS"
  352. 4070 PRINT"8192 TO 8192+8191 (8K'S WORTH), THEN"
  353. 4080 PRINT"TELL THE VIDEO CHIP TO CHANGE THE"
  354. 4090 PRINT"'NORMAL' LOCATION OF CHARACTER MEMORY[146]"
  355. 4100 PRINT"SO IT STARTS AT 8192!"
  356. 4110 PRINT"HOW?":MS$="I GIVE UP":GOSUB63100:GOSUB63000
  357. 4120 PRINT"[147]POKE V+24,(PEEK(V+24)AND15)OR128)"
  358. 4130 PRINT"WHICH SETS THE UPPER  NYBBLE IN THE"
  359. 4140 PRINT"24'TH REGISTER TO 1000[146], WHILE LEAVING"
  360. 4150 PRINT"ALL THE LOWER BITS UNCHANGED..."
  361. 4160 PRINT"AND 1000[146]=8 (IN DECIMAL)"
  362. 4170 PRINT"AND 8*1024=8192[146]"
  363. 4180 PRINT"SO CM[146]=START OF CHARACTER MEMORY[146] IS"
  364. 4190 PRINT"NOW AT 8192[146]!!":MS$="  SIMPLE":GOSUB63100:GOSUB63000
  365. 4300 PRINT"[147]":MS$="AU REVOIR!":GOSUB63100:PRINT"":END
  366. 60000 REM INITIALIZE
  367. 60001 BT$="":FORI=1TO24:BT$=BT$+"":NEXT
  368. 60002 PT$="[158][176][192][192][192][192][192][192][192][192][192][192][174][157][157][157][157][157][157][157][157][157][157][157][157][221][221][157][157][157][157][157][157][157][157][157][157][157][157][173][178][192][192][192][192][192][192][192][192][178][189]"
  369. 60003 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][206][163][163][163][163][163][163][163][163][163][163][163][163][205][157][157][157][157][157][157][157][157][157][157][157][157][157][157][165]============[167]"
  370. 60004 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][157][208][207][163][163][163][163][163][163][163][163][163][163][208][207][145][145][145][145][157][157][157][157][157][157][157][157][157][157][157][157]"
  371. 60005 PT$=BT$+"[145][145][145][145][145][145]"+PT$+"[159]"
  372. 60007 ML$=""
  373. 60008 WD=40:CRT=1024
  374. 60009 W2=WD/2:W3=WD-1:W1$=MID$(STR$(WD),2):POKE53281,6:POKE53280,6:PRINT""
  375. 60010 V=53248:FORI=0TO16:POKEV+I,0:NEXT
  376. 60011 POKEV+23,0:POKEV+29,0:FORI=0TO7:POKEV+39+I,0:NEXT
  377. 60020 RETURN
  378. 62000 GOSUB63000
  379. 62001 PRINTSD$CL$:PRINTCL$:PRINTCL$
  380. 62003 RETURN
  381. 63000 PRINT"HIT RETURN[146] TO CONTINUE";
  382. 63001 GETA$:IFA$<>""THEN63001
  383. 63002 GETA$:IFA$=""THEN63002
  384. 63003 RETURN
  385. 63100 FORT=1TO5:PRINTPT$MS$;
  386. 63101 PRINTPT$"          ";
  387. 63102 PRINTPT$MS$;:NEXT
  388. 63103 PRINT"":RETURN
  389. 63900 SD$="":CL$="[146]                                      [146]"
  390. 63901 SR$=""
  391. 63902 RETURN
  392.